﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Rhino.Mocks;
using YakShaver.TFSExtension;
using YakShaver.Contract;
namespace YakShaver.Tests.TFS
{
    /// <summary>
    /// Summary description for TFSUnitTests
    /// </summary>
    [TestClass]
    public class TFSUnitTests
    {
        public TFSUnitTests()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Additional test attributes
        //
        // You can use the following additional attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void UT_TestTFSAnalysisServiceNeedIntervention()
        {
            TFSAnalysisService service = new TFSAnalysisService();
            MockRepository mocks = new MockRepository();

            mocks.Record();
          IWorkItemDataContract dataContract = mocks.CreateMock<IWorkItemDataContract> ();
          Expect.Call(dataContract.Description).Return("Test Description");
          Expect.Call(dataContract.PageId).Return("/home/test.aspx");
          Expect.Call(dataContract.Title).Return("test title");
          Expect.Call(dataContract.WorkItemImpactType).Return(WorkItemImpactType.Unknown);
          Expect.Call(dataContract.WorkItemType).Return(WorkItemType.Unknown);

          mocks.ReplayAll();
          YakShaverWorkItem ysWorkItem = service.AnalyzeSubmittedWorkItem(ref dataContract);

          mocks.VerifyAll();
          Assert.IsTrue(ysWorkItem.Status == WorkItemSubmissionStatus.NeedIntervention);
           
        }

        [TestMethod]
        public void UT_TestTFSAnalysisServiceNoIntervention()
        {
            TFSAnalysisService service = new TFSAnalysisService();
            MockRepository mocks = new MockRepository();

            mocks.Record();
            IWorkItemDataContract dataContract = mocks.CreateMock<IWorkItemDataContract>();
            Expect.Call(dataContract.Description).Return("Test Description");
            Expect.Call(dataContract.PageId).Return("/home/test2.aspx");
            Expect.Call(dataContract.Title).Return("test title");
            Expect.Call(dataContract.WorkItemImpactType).Return(WorkItemImpactType.Unknown);
            Expect.Call(dataContract.WorkItemType).Return(WorkItemType.Unknown);


            mocks.ReplayAll();
            YakShaverWorkItem ysWorkItem = service.AnalyzeSubmittedWorkItem(ref dataContract);

            mocks.VerifyAll();
            Assert.IsTrue(ysWorkItem.Status == WorkItemSubmissionStatus.Ready);
        }
    }
}
